//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Habitacion.h" 
//---------------------------------------------------------------------------

#pragma package(smart_init)
Habitacion::Habitacion(){
    Objeto3D * paredv, *paredp, *suelo, *paredpmas;
    ObjetoCompuesto3D * muebles;
    int alto = 100;
    int ancho = 100;
    int grosor = 5;

    //Persiana
    Persiana * persiana=new Persiana(.5,2.*ancho/3.,grosor/2,alto/(3.*2.5)+1,2);
    blind=persiana;
    persiana->color->set(.3,.9,.2);
    objetos->anadir(persiana);
    PV * p= new PV(0,1,0,0);
    persiana->marco_de_coordenadas->rotate(-90,p);
    delete p;
    p= new PV(2.*ancho/3.,alto/3.,-grosor-2,0);
    persiana->marco_de_coordenadas->traslate(p);
    delete p;

    //Pared con hueco para empotrar una ventana
    paredv = new ParedVentana(ancho*2, alto, grosor);
    p= new PV(0,1,0,0);
    paredv->marco_de_coordenadas->rotate(-90,p);
    delete p;
    paredv->color->set(.8,.8,.8);
    objetos->anadir(paredv);

    //Pared con hueco para empotrar una puerta
    paredp=new ParedPuerta(ancho, alto, grosor);
    paredp->color->set(.8,.8,.8);
    p= new PV(0,0,0,0);
    paredp->marco_de_coordenadas->traslate(p);
    delete p;
    objetos->anadir(paredp);

    //Pared pa rellenar, pa alargarla vamos
    paredpmas = new Tablero(50,alto,grosor,7,7,2);
    paredpmas->color->set(.8,.8,.8);
    p= new PV(1,0,0,0);
    paredpmas->marco_de_coordenadas->rotate(-90,p);
    delete p;
    p= new PV(ancho,0,0,0);
    paredpmas->marco_de_coordenadas->traslate(p);
    delete p;
    objetos->anadir(paredpmas);

    //suelo estilo tablero de ajedrez
    suelo=new Suelo(ancho*1.5, ancho*2, grosor,6);
    p= new PV(1,0,0,0);
    suelo->marco_de_coordenadas->rotate(90,p);
    delete p;
    objetos->anadir(suelo);

    //Mesa
    GLfloat altura, anchura, longitud,radio,gros;
    altura = alto/5.;
    anchura = ancho/2.;
    longitud = ancho/3.5;
    radio = 4;
    gros = 2;
    Mesa * mesa = new Mesa(altura,anchura,longitud,gros,radio);
    p= new PV(1,0,0,0);
    mesa->marco_de_coordenadas->rotate(270,p);
    delete p;
    objetos->anadir(mesa);
    p= new PV(60,-85,5,0);
    mesa->marco_de_coordenadas->traslate(p);
    delete p;
    mesa->color->set(.6,.2,.1);
    afin_mesa = mesa->marco_de_coordenadas;

    //Puerta
    Puerta * puerta = new Puerta(2*alto/3., ancho/3.,grosor);
    door=puerta;
    puerta->color->set(.6,.2,.1,1);
    objetos->anadir(puerta);
    p= new PV(1,0,0,0);
    puerta->marco_de_coordenadas->rotate(270,p);
    delete p;
    p= new PV(0,1,0,0);
    puerta->marco_de_coordenadas->rotate(270,p);
    delete p;
    p= new PV(0,0,-ancho/3.*2.,0);
    puerta->marco_de_coordenadas->traslate(p);
    delete p;

    //Estanteria
    int numEst=4;
    Estanteria * estanteria=new Estanteria(grosor/3.,ancho/3.-10,grosor+3,numEst,alto/(3.*numEst));
    estanteria->color->set(.6,.2,.1,1);
    objetos->anadir(estanteria);
    p= new PV(20+2*ancho/3.,alto/3.,0,0);
    estanteria->marco_de_coordenadas->traslate(p);
    delete p;
    afin_estanteria = estanteria->marco_de_coordenadas;

    //Lampara
    Lampara *lampara =new Lampara(2*alto/3,radio,radio*2,10,10);
    objetos->anadir(lampara);
    p= new PV(1,0,0,0);
    lampara->marco_de_coordenadas->rotate(-90,p);
    delete p;
    p= new PV(ancho/5.,-10,grosor,0);
    lampara->marco_de_coordenadas->traslate(p);
    delete p;
    afin_lampara = lampara->marco_de_coordenadas;

    //Persona
    GLfloat radC=5;
    GLfloat radB=1.5;
    GLfloat radP=2;
    Persona *persona=new Persona(2*alto/3-20,radC,4*radP,2*radP+2,radP,radB,5,5);
    person=persona;
    objetos->anadir(persona);
    p = new PV(1,0,0,0);
    persona->marco_de_coordenadas->rotate(-90,p);
    delete p;
    p = new PV(0,0,1,0);
    persona->marco_de_coordenadas->rotate(90,p);
    delete p;
    p= new PV(-4*ancho/5.,-2*grosor,grosor+radP/1.5,0);
    persona->marco_de_coordenadas->traslate(p);
    delete p;
    afin_persona=persona->marco_de_coordenadas;




}
void Habitacion::abrirPuerta(GLfloat angulo){
        PV *p= new PV(-1,0,0,0);
        door->marco_de_coordenadas->rotate(angulo,p);
        delete p;
}
void Habitacion::cerrarPuerta(GLfloat angulo){
        PV * p= new PV(1,0,0,0);
        door->marco_de_coordenadas->rotate(angulo,p);
        delete p;
}

void Habitacion::muevePersona(PV* dir){
//se mueve en el plano -x,-y
        person->muevePersona(dir);
}

void Habitacion::rotaPersona(GLfloat angulo){
//se mueve en el plano -x,-y
        person->rotaPersona(angulo);
}

